// 引入 Node.js 的文件系统模块，用于读写文件
import fs from 'fs';
// 引入 Node.js 的路径模块，用于处理文件和目录路径
import path from 'path';
// 引入 gray-matter，用于解析 Markdown 文件中的元数据（front matter）
import matter from 'gray-matter';

// 定义博客文章存放的目录，使用绝对路径
const postsDirectory = path.join(process.cwd(), 'src/posts');

// 获取所有 Markdown 文章，并按日期排序
export function getSortedPostsData() {
  // 读取 posts 目录下所有文件名
  let fileNames = [];
  try {
    fileNames = fs.readdirSync(postsDirectory);
    console.log('【调试】postsDirectory:', postsDirectory);
    console.log('【调试】fileNames:', fileNames);
  } catch (err) {
    console.error('【调试】读取 posts 目录失败:', err);
  }
  // 遍历每个文件，提取文章数据
  const allPostsData = fileNames.map((fileName) => {
    // 去掉文件扩展名 .md，得到文章的 slug
    const slug = fileName.replace(/\.md$/, '');
    // 拼接出完整的文件路径
    const fullPath = path.join(postsDirectory, fileName);
    let fileContents = '';
    try {
      fileContents = fs.readFileSync(fullPath, 'utf8');
      console.log('【调试】读取文件:', fullPath);
    } catch (err) {
      console.error('【调试】读取文件失败:', fullPath, err);
    }
    // 用 gray-matter 解析 Markdown 文件，提取元数据和内容
    const matterResult = matter(fileContents);
    // 返回包含 slug 和元数据的对象
    return {
      slug,
      ...matterResult.data,
    };
  });
  // 按日期降序排序（新文章在前）
  return allPostsData.sort((a, b) => (a.date < b.date ? 1 : -1));
}

// 根据 slug 获取单篇文章的详细内容
export function getPostData(slug) {
  // 拼接出对应 Markdown 文件的完整路径
  const fullPath = path.join(postsDirectory, `${slug}.md`);
  let fileContents = '';
  try {
    fileContents = fs.readFileSync(fullPath, 'utf8');
    console.log('【调试】读取详情文件:', fullPath);
  } catch (err) {
    console.error('【调试】读取详情文件失败:', fullPath, err);
  }
  // 解析 Markdown 文件，提取元数据和正文内容
  const matterResult = matter(fileContents);
  // 返回包含 slug、正文内容和元数据的对象
  return {
    slug,
    content: matterResult.content,
    ...matterResult.data,
  };
} 